package main.java;

/**
 * @program: pratice
 * @author: 关键我是大怪
 * @create: 2021-10-29 20:16
 */

import java.util.HashSet;

/**
 * 题目：
 * 给定正整数 N ，我们按任何顺序（包括原始顺序）将数字重新排序，注意其前导数字不能为零。
 * 如果我们可以通过上述方式得到 2 的幂，返回 true；否则，返回 false。
 * <p>
 * 示例：
 * 输入：1
 * 输出：true
 * <p>
 * 输入：46
 * 输出：true
 */
public class Test64_重新排序得到2的幂 {
    HashSet<String> set = new HashSet<>();

    public boolean reorderedPowerOf2(int n) {
        init();
        return set.contains(count(n));
    }

    public void init() {
        for (int n = 1; n <= 1e9; n <<= 1) {
            set.add(count(n));
        }
    }

    public String count(int n) {
        char[] chr = new char[10];
        while (n > 0) {
            ++chr[n % 10];
            n /= 10;
        }
        return new String(chr);
    }
}
